package manong.controller;

import com.github.pagehelper.PageInfo;
import manong.beans.User;
import manong.constant.ServerResponse;
import manong.beans.CourseTable;
import manong.service.ICourseTableService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;

@RestController
@RequestMapping("/coursetable/")
public class CourseTableController {

    @Autowired
    private ICourseTableService iCourseTableService;
/* 管理员端  */
    @RequestMapping("findBy")
    public ServerResponse<List<CourseTable>> find(String className, String teacherName,Integer week) {
        if ((className==null||"".equals(className)&&(teacherName==null||"".equals(teacherName)))){
            return ServerResponse.createByErrorMessage("请输入正确参数");
            //三者为空-》返回一个包含错误信息的ServerResponse对象，提示用户输入正确的参数或选择正确的周数。
        }
        if (week==null||week==0){
            return ServerResponse.createByErrorMessage("请选择周数");
        }
        return iCourseTableService.findBy(className,teacherName,week);
        //调用服务方法-》将结果以ServerResponse的形式返回给客户端。
       // 做一些简单的参数校验，确保传入的参数是有效的。
    }
//这个方法接受班级名、教师名和周数作为参数，用于查找符合条件的课程表记录。如果传入的班级名和教师名都为空，或者周数为null或0，
    //它会返回一个包含错误信息的ServerResponse对象，提示用户输入正确的参数或选择正确的周数。
   // 否则，它会调用iCourseTableService的findBy方法，将查询结果以ServerResponse的形式返回给客户端。
    @RequestMapping("add")
    public ServerResponse<String> add(CourseTable courseTable) {

        return iCourseTableService.add(courseTable);
    }

    @RequestMapping("del")
    public ServerResponse<String> del(Integer id) {
        return iCourseTableService.del(id);
    }

    @RequestMapping("update")
    public ServerResponse<String> update(CourseTable courseTable) {
        return iCourseTableService.update(courseTable);
    }

    @RequestMapping("find")
    public ServerResponse<CourseTable> find(Integer id) {   //  ——————》封装一个类，自定义返回值---》前端需要：需要返回的数据库的数据，需要返回的状态，
    	                                                                             //还需要返回的提示语  --》规范的写法
        return iCourseTableService.find(id);
    }

    @RequestMapping("findAll")
    public ServerResponse<PageInfo<CourseTable>> findAll(Integer pageNum, Integer pageSize) {
        return iCourseTableService.findAll(pageNum, pageSize);
    }
//这个方法映射到URL端点"/findAll"。它接受两个参数，"pageNum"和"pageSize"，用于分页。它调用"iCourseTableService.findAll"方法，
    //以指定的页数和页面大小检索课程表记录的列表，然后将结果包装在"ServerResponse"对象中，并将其作为HTTP响应返回。
    @RequestMapping("findAllBy")
    public ServerResponse<PageInfo<CourseTable>> findAllBy(HttpServletRequest request,Integer pageNum, Integer pageSize, Integer week,
    String courseName, String className, String teacherName,String roomName) {
        System.out.println(request.getRequestURI());
        System.out.println(request.getServletPath());
        return iCourseTableService.findAllBy(pageNum, pageSize,week,courseName,className,teacherName,roomName);//检索并返回经过过滤和分页处理的课程表记录。
    }

    //此方法用于根据提供的参数搜索课程表记录。它打印请求的URI和Servlet路径以进行调试，然后调用"iCourseTableService.findAllBy"方法，检索并返回经过过滤和分页处理的课程表记录。

    @RequestMapping("adjust")  //调整
    public ServerResponse<String> adjust(Integer courseTableId,String day,Integer week,Integer number,String classroomName,Integer classroomId){

        return iCourseTableService.adjust(courseTableId,classroomId,week,day,number,classroomName);
    }

    //用于对课程表条目进行调整，例如更改教室或日程安排的细节。它调用"iCourseTableService.adjust"方法，并返回一个包含字符串消息的"ServerResponse"作为响应，
    //这很可能是对调整的确认。这些方法是Spring MVC Web应用程序的一部分，它们定义了在相应的端点处理特定HTTP请求的行为。实际的方法实现，以及"iCourseTableService"服务的功能，

    /**
     * 管理员端查询课表接口
     * @param className
     * @param teacherName
     * @param week
     * @return
     */
    @RequestMapping("findByStu")   //根据学生进行查询
    public ServerResponse<List<CourseTable>> findByStu(Integer week, HttpSession session) {  //注入一个session
 ////从session中取出用户信息   	
        User user = (User) session.getAttribute("user");  //首先从session里面取出来数据
////取出学号，用于查询班级名称       
        String Sno = user.getMark();  //获取学号
        String teacherName = "";  //学生端查询不需要输入老师姓名，随着所在班级，周数查询即可--》不需要老师名，但不传会报错，所以设置为空
        String className = iCourseTableService.findByClassName(Sno);//根据学生的学号去获取班级的名称，传学号（sno唯一）
////判断周数是否正确
        if (week==null||week==0){
            return ServerResponse.createByErrorMessage("请选择周数");
        }
////查询课表        
        return iCourseTableService.findBy(className,teacherName,week); //传参到后端进行查询
        //方法调用还是之前的一个方法，只是处理了一下接口传的参数
        //调用服务方法-》将结果以ServerResponse的形式返回给客户端。
        // 做一些简单的参数校验，确保传入的参数是有效的。
    }

    /**
     * 教师端端查课表接口
     * @param week
     * @param session
     * @return
     */
    @RequestMapping("findByTeacher")
    public ServerResponse<List<CourseTable>> findByTeacher(String className,Integer week, HttpSession session) {
        User user = (User) session.getAttribute("user");
        String teacherName = user.getUsername();

        if (week==null||week==0){
            return ServerResponse.createByErrorMessage("请选择周数");
        }
        return iCourseTableService.findBy(className,teacherName,week);
        //调用服务方法-》将结果以ServerResponse的形式返回给客户端。
        // 做一些简单的参数校验，确保传入的参数是有效的。
    }

    @RequestMapping("findAllByTeacher")
    public ServerResponse<PageInfo<CourseTable>> findAllByTeacher(HttpSession session,Integer pageNum, Integer pageSize, Integer week,
                                                           String courseName, String className, String teacherName,String roomName) {
        User user = (User) session.getAttribute("user");
        teacherName = user.getUsername();
        return iCourseTableService.findAllByTeacher(pageNum, pageSize,teacherName);//检索并返回经过过滤和分页处理的课程表记录。
    }

}












/*
课程表实现为班级添加课的功能--》班级--》添加课程---》发起两次请求，用两个接口--》查询课程和查询老师的名字---》点击分配课程，向后端发起一次请求--》arrangecontroller
  */
